package com.rmy.queue.service;

import java.util.List;

import com.rmy.queue.api.domain.UploadCallNumberReq;
import com.rmy.queue.api.domain.UploadTakeNumberReq;
import com.rmy.queue.domain.QmsQueueList;

/**
 * 排队队列Service接口
 *
 * @author rmy
 * @date 2022-09-29
 */
public interface IQmsQueueListService
{
    /**
     * 查询排队队列
     *
     * @param serialNo 排队队列主键
     * @return 排队队列
     */
    public QmsQueueList selectQmsQueueListBySerialNo(String serialNo);

    /**
     * 查询排队队列列表
     *
     * @param qmsQueueList 排队队列
     * @return 排队队列集合
     */
    public List<QmsQueueList> selectQmsQueueListList(QmsQueueList qmsQueueList);

    /**
     * 新增排队队列
     *
     * @param qmsQueueList 排队队列
     * @return 结果
     */
    public int insertQmsQueueList(QmsQueueList qmsQueueList);

    /**
     * 修改排队队列
     *
     * @param qmsQueueList 排队队列
     * @return 结果
     */
    public int updateQmsQueueList(QmsQueueList qmsQueueList);

    /**
     * 批量删除排队队列
     *
     * @param serialNos 需要删除的排队队列主键集合
     * @return 结果
     */
    public int deleteQmsQueueListBySerialNos(String[] serialNos);

    /**
     * 删除排队队列信息
     *
     * @param serialNo 排队队列主键
     * @return 结果
     */
    public int deleteQmsQueueListBySerialNo(String serialNo);

    /**
     * 生成排队号码
     *
     * @param qmsQueueList
     * @return 结果
     */
    public int genQueueNumber(QmsQueueList qmsQueueList);


    /**
     * 软叫号
     *
     * @param qmsQueueList 队列
     * @return 结果 SERAIL_NO
     */
    public String callQueueNo(QmsQueueList qmsQueueList);


    /**
     * 根据窗口ID获取下一排队信息
     * @param qmsQueueList
     * @return
     */
    public QmsQueueList getNextQueueNo(QmsQueueList qmsQueueList);


    /**
     * 根据uuid叫号
     * @param qmsQueueList
     * @return
     */
    public String callNumber(QmsQueueList qmsQueueList) throws Exception;



    /**
     * 根据窗口ID查询普通排队信息
     *
     * @param qmsQueueList 窗口ID
     * @return 结果 上次叫号信息
     */
    public List<QmsQueueList> selectCommonQueue(QmsQueueList qmsQueueList);


    /**
     * 供ERP业务使用
     * @param qmsQueueList
     * @return
     */
    public QmsQueueList callQueueNoByBusiness(QmsQueueList qmsQueueList);

    /**
     * 查询可重新呼叫的排队信息
     * @param qmsQueueList
     * @return
     */
    public QmsQueueList selectAvaliableReCall(QmsQueueList qmsQueueList);


    /**
     * 根据排队号码查询当天排队信息
     *
     * @param qmsQueueList
     * @return 结果
     */
    public QmsQueueList selectQmsQueueByQueueNo(QmsQueueList qmsQueueList);


    /**
     * 根据窗口ID更新排队信息完成状态
     * @param windowId
     * @return
     */
    public int updateQueueCompleteByWindowId(Long windowId);

    /**
     * 跳过
     * @param windowUuid
     * @return
     * @throws Exception
     */
    public QmsQueueList ignoreCurrentNumberByUuid(String windowUuid) throws Exception;

    /**
     * 根据机构号查询当前队列
     * @param orgNo
     * @return
     */
    public List<QmsQueueList> selectQueueListByOrgNo(String orgNo);

    /**
     * 根据机构号查询已叫号列表
     * @param orgNo
     * @return
     */
    public List<QmsQueueList> selectCalledListByOrgNo(String orgNo);


    /**
     * 上传取号信息
     * @param uploadTakeNumberReq
     * @return
     */
    public int uploadTakeNumberInfo(UploadTakeNumberReq uploadTakeNumberReq);

    /**
     * 上传呼叫信息
     * @param uploadCallNumberReq
     * @return
     */
    public int uploadCallNumberInfo(UploadCallNumberReq uploadCallNumberReq);

}
